package com.ude.pim.controller;

import cn.hutool.json.JSONUtil;
import com.alibaba.druid.support.json.JSONUtils;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ude.pim.common.R;
import com.ude.pim.entity.User;
import com.ude.pim.service.UserService;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.web.bind.annotation.*;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import java.util.List;

import static com.ude.pim.utils.PIMConstants.USER_LIST;

/**
 * <p>
 * 用户表	记录用户信息	id	姓名	手机号	密码	类型（管理员/普通用户）	在职状态	创建时间	更新时间 前端控制器
 * </p>
 *
 * @author yb
 * @since 2023-08-08
 */
@RestController
@RequestMapping("/user")
public class UserController {
    @Autowired
    private UserService userService;

    @Autowired
    private StringRedisTemplate stringRedisTemplate;

    /**
     * 1. 验证工号是否存在
     * 2. 验证密码是否匹配
     * 3. 验证是否是在职状态
     * 4. 存入Session容器
     * @param session
     * @param user
     * @return
     */
    @PostMapping("/login")
    public R<User> login(HttpSession session, @RequestBody User user){
        // 1. 验证工号是否存在
        String number = user.getNumber();
        User one = userService.getOne(new LambdaQueryWrapper<User>().eq(User::getNumber, number));
        if(one==null)
            return R.error("工号不存在");
        // 2. 验证密码是否匹配
        if(!user.getPassword().equals(one.getPassword()))
            return R.error("密码错误");
        // 3. 验证是否是在职状态
        if(one.getIsDeleted()==1)
            return R.error("您已离职");
        // 4. 存入Session容器
        session.setAttribute("user",one.getId());
        return R.success(one);
    }

    @PostMapping("/logout")
    public R<String> logout(HttpSession session){
        session.removeAttribute("user");
        return R.success("登出成功");
    }

    @GetMapping("/list")
    public R<Page<User>> list(int page,int pageSize,String query){
        Page<User> pageInfo = new Page<>(page,pageSize);
        LambdaQueryWrapper<User> lqw = new LambdaQueryWrapper<>();
        if(StringUtils.isNotBlank(query))
            lqw.like(User::getName,query);

        userService.page(pageInfo,lqw);
        return R.success(pageInfo);
    }
}
